#!/usr/bin/python3
# -*- coding: utf-8 -*-

import re

import allure
from playwright.sync_api import Page, expect

from models.base_page import BasePage
from models.network_page.security_group_page.security_group_details_page import \
    SecurityGroupDetailPage


class SecurityGroupsPage(BasePage):
    def __init__(self, page: Page, timeout=5000):
        super().__init__(page)
        self.timeout = timeout
        self.route = "security_groups"
        self.details_page = SecurityGroupDetailPage(page)

    @allure.step("点击创建安全组按钮")
    def click_create_security_groups_button(self):
        """点击创建安全组按钮"""
        self.toolbar.create_button()

    @allure.step("点击开启组内互信")
    def click_enable_group_trust(self):
        """点击开启组内互信"""
        # self.page.get_by_label("打开").check()
        if self.page.get_by_label("打开").is_visible():
            self.page.get_by_label("打开").check()
        if self.page.get_by_label("开启").is_visible():
            self.page.get_by_label("开启").check()

    @allure.step("点击关闭组内互信")
    def click_disable_group_trust(self):
        """点击关闭组内互信"""
        self.page.get_by_label("关闭").check()

    def expect_create_security_group_title(self):
        """获取创建安全组弹框的名称"""
        expect(self.page.get_by_role("heading", name="创建安全组")).to_have_text("创建安全组")

    @allure.step("输入安全组名称")
    def input_security_group_name(self, security_group_name=""):
        """输入安全组名称"""
        self.fill('input[name="security_group_name"]', security_group_name)

    @allure.step("输入安全组描述")
    def input_security_group_description(self, security_group_description=""):
        """输入安全组名称"""
        self.fill('textarea[name="description"]', security_group_description)

    @allure.step("点击提交创建安全组按钮")
    def click_submit_button(self):
        """点击提交创建安全组按钮"""
        self.popout.click_submit_by_role_button()

    @allure.step("选择安全组做删除")
    def select_table_to_delete(self, sg_name="", sg_id=""):
        """选择安全组做删除"""
        self.table.get_cell_by_keyword(sg_name)

    def check_sg_page_user_guide_element_to_be_visible(self):
        """检查使用指南元素是否可见"""
        with allure.step("检查SecurityGroupsPage:使用指南元素是否可见"):
            self.expect.to_be_visible(self.page.locator(".intro"))  # 使用指南栏目
            self.expect.to_be_visible(self.page.get_by_text("使用指南"))
            self.expect.to_be_visible(self.page.get_by_text("收起"))
            self.expect.to_be_visible(self.page.locator(".svg-icon > use"))
            self.expect.to_contain_text(self.page.locator("#console"),
                                        "云平台 安全组可以加强位于基础网络中的云服务器或路由器的安全性，"
                                        "您可以创建多个安全组来保护您的云服务器或路由器。"
                                        "初始状态下，每个安全组都不包含任何规则，即任何端口都是封闭的，您需要建立规则以打开相应的端口。"
                                        "注：平台为每位用户提供一个缺省安全组（ID 之后带有星标），默认打开22端口。")

    def check_sg_page_table_element_to_be_visible(self):
        """检查工具栏及table是否可见"""
        with allure.step("检查SecurityGroupsPage:工具栏及table是否可见"):
            self.expect.to_be_visible(self.page.locator(".table-toolbar"))
            self.expect.to_be_visible(self.page.get_by_role("link", name="G", exact=True))
            self.expect.to_be_visible(self.page.locator("a").filter(has_text=re.compile(r"^创建$")))
            self.expect.to_be_visible(self.page.get_by_placeholder(" "))
            self.expect.to_be_visible(self.page.get_by_role("combobox"))